package br.com.sgmf.web.managedbean;

import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import br.com.sgmf.model.HistoricoVeiculo;
import br.com.sgmf.model.Veiculo;
import br.com.sgmf.service.HistoricoVeiculoService;
import br.com.sgmf.service.VeiculoService;

@Component
@ManagedBean
@RequestScoped
public class HistoricoVeiculoBean {

	private static final String BUSCAR_VEICULO = "Necessário buscar veículo";
	private static final String HISTORICO_VEICULO_SALVO_COM_SUCESSO = "Histórico salvo com sucesso!";
	private static final String ERRO_AO_SALVAR_HISTORICO_VEICULO = "Erro ao salvar Histórico";

	private HistoricoVeiculo historicoVeiculo;
	private Veiculo veiculo;

	private List<Veiculo> veiculos;

	private String placa;
	private Date data;

	@Autowired
	private VeiculoService veiculoService;

	@Autowired
	HistoricoVeiculoService historicoVeiculoService;

	@PostConstruct
	public void inicializar() {
		historicoVeiculo = new HistoricoVeiculo();
		veiculo = null;
		veiculos = null;
		data = new Date();
	}

	public String salvar() {
		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage message;

		try {
			if (veiculo == null) {
				message = new FacesMessage(FacesMessage.SEVERITY_WARN,
						BUSCAR_VEICULO, null);
			} else {
				historicoVeiculoService.save(historicoVeiculo, veiculo, data);
				message = new FacesMessage(FacesMessage.SEVERITY_INFO,
						HISTORICO_VEICULO_SALVO_COM_SUCESSO, null);
				inicializar();
			}
		} catch (Exception e) {
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					ERRO_AO_SALVAR_HISTORICO_VEICULO, null);
			e.printStackTrace();
		}

		context.addMessage(null, message);
		return null;
	}

	public void novo() {
		historicoVeiculo = new HistoricoVeiculo();
		veiculo = null;
		veiculos = null;
		placa = null;
		data = new Date();
	}

	public List<Veiculo> buscarVeiculo() {
		veiculos = veiculoService.findByPlaca(placa);
		placa = null;
		return veiculos;
	}

	public void adicionarVeiculo(Veiculo veiculo) {
		this.veiculo = veiculo;
	}

	public HistoricoVeiculo getHistoricoVeiculo() {
		return historicoVeiculo;
	}

	public void setHistoricoVeiculo(HistoricoVeiculo historicoVeiculo) {
		this.historicoVeiculo = historicoVeiculo;
	}

	public Veiculo getVeiculo() {
		return veiculo;
	}

	public void setVeiculo(Veiculo veiculo) {
		this.veiculo = veiculo;
	}

	public List<Veiculo> getVeiculos() {
		return veiculos;
	}

	public void setVeiculos(List<Veiculo> veiculos) {
		this.veiculos = veiculos;
	}

	public String getPlaca() {
		return placa;
	}

	public void setPlaca(String placa) {
		this.placa = placa;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public VeiculoService getVeiculoService() {
		return veiculoService;
	}

	public void setVeiculoService(VeiculoService veiculoService) {
		this.veiculoService = veiculoService;
	}

	public HistoricoVeiculoService getHistoricoVeiculoService() {
		return historicoVeiculoService;
	}

	public void setHistoricoVeiculoService(
			HistoricoVeiculoService historicoVeiculoService) {
		this.historicoVeiculoService = historicoVeiculoService;
	}

}